package org.orz.cloud.lock;

public class LockUtil {

	/**
	 * 加锁操作
	 * @param key 锁对象的key值
	 * @return 获取锁成功或者失败
	 */
	public static boolean lock(String key){
		return getLock().lock(key);
	}

	/**
	 * 加锁操作，并设置锁的失效时间
	 * @param key 锁对象的key值
	 * @param timeout 超时时间
	 * @return 加锁成功或失败
	 */
	public static boolean lock(String key,int timeout){
		return getLock().lock(key,timeout);
	}


	/**
	 * 释放锁
	 * 释放操作会从当前线程的锁栈中取出顶端的一个锁并释放掉
	 */
	public static void release(){
		LockHolder.getInstance().release();
	}

	/**
	 * 使用默认路径、配置，创建一个新的锁对象并返回，
	 * @return 创建的锁对象
	 */
	public static Lock getLock(){
		return LockHolder.getInstance().getLock();
	}

	/**
	 * 轮询锁，如果加锁失败，会一直尝试重新加锁，直到加锁成功。
	 * @param key 要加的锁的key
	 */
	public static void lockLoop(String key){
		while(true){
			if (getLock().lock(key)){
				break;
			}
		}
	}
}
